package algorithm.niuke;

/*
2 2
1 2
2 2
a[1] = 1;
a[2] = 1;
a[1] = a[1]+a[2];
a[2] = a[2];
*/
/*
2 2
1 2
2 2
a[1] = 1;
a[2] = 1;
a[1] = a[1]+a[2];
a[2] = a[2];
*/
import java.util.Scanner;

public class Main {
    public static void main(String[] arg) {
        Scanner cin = new Scanner(System.in);
        int total = cin.nextInt();
        int numSize = cin.nextInt();
        int mod = 1000000007;
        int[][] count = new int[total][numSize + 2];
        for (int k = 1; k <= numSize; k++) {
            count[0][k] = 1;
        }
        for (int k = 1; k < total; k++) {
            for (int now = 1; now <= numSize; now++) {// 满足pre<=now的
                count[k][now] = mod + count[k][now - 1] + count[k - 1][now];
                count[k][now] %= mod;
            }
            int[] reverse = new int[numSize + 2];
            int[] multiple = new int[numSize + 2];
            for (int now = numSize; now >= 1; now--) {// 满足pre>now
                reverse[now] = reverse[now + 1] + count[k - 1][now + 1];
                reverse[now] %= mod;
            }
            for (int now = 1; now <= numSize; now++) {// 求倍数
                int m = 2;
                int mul = m * now;
                while (mul <= numSize) {
                    multiple[now] += count[k - 1][mul];
                    multiple[now] %= mod;
                    mul = (++m) * now;
                }
            }
            for (int now = 1; now <= numSize; now++) {// 满足pre<=now的
                count[k][now] = mod + count[k][now] + reverse[now] - multiple[now];
                count[k][now] %= mod;
            }
        }
        int result = 0;
        for (int i = 1; i <= numSize; i++) {
            result += count[total - 1][i];
            result %= mod;
        }
        System.out.print(result);
    }

    static void fun1() {
        Scanner cin = new Scanner(System.in);
        int total = cin.nextInt();
        int numSize = cin.nextInt();
        int mod = 1000000007;
        int[] count = new int[numSize + 2];
        int[] temp = new int[numSize + 2];
        for (int i = 1; i <= numSize; i++) {
            count[i] = 1;
        }
        for (int k = 1; k < total; k++) {
            for (int now = 1; now <= numSize; now++) {
                for (int pre = 1; pre <= numSize; pre++) {
                    if (pre <= now || pre % now != 0) {
                        temp[now] += count[pre];
                        temp[now] %= mod;
                    }
                }
            }
            for (int i = 1; i <= numSize; i++) {
                count[i] = temp[i];
                temp[i] = 0;
            }
        }
        int result = 0;
        for (int i = 1; i <= numSize; i++) {
            result += count[i];
            result %= mod;
        }
        System.out.print(result);
    }
}